BNA :Description

La Banque nationale agricole ou BNA est une banque étatique tunisienne.

Fondée le 1er juin 1959, elle a le statut de société anonyme dont le capital social se monte à 200 millions de dinars.

Histoire

À l’époque de sa création, l’agriculture tunisienne est financée par l’ancien système de crédit agricole constitué par la Caisse mutuelle de crédit agricole, la Caisse foncière et les Sociétés tunisiennes de prévoyance et adapté aux structures du protectorat.

C’est le président Habib Bourguiba qui lance véritablement ses activités le 10 octobre 1959. Après dix ans de croissance de son activité et son importante participation dans le développement économique du pays, au travers de l’ouverture de ses financements aux différents secteurs, l’institution prend le nom de Banque nationale de Tunisie (BNT).

La restructuration de la BNT et sa fusion avec la Banque nationale de développement agricole, le 24 juin 1989, redonnent à la banque sa dénomination initiale et unifient à nouveau les structures d’octroi du crédit agricole. Cette fusion constitue le début du processus de restructuration du système bancaire tunisien.

Après la révolution tunisienne de 2011, Jaafar Khattèche est nommé PDG de la banque, succédant à Mohamed Bichiou

Structure

La banque est structurée est composée d’une direction générale regroupant un président-directeur général, un directeur général adjoint et un secrétaire général auxquels sont rattachés treize directions centrales, un conseiller, des comités, un secrétariat permanent des marchés et une direction d’audit interne2. Par ailleurs, quinze directions régionales sont installées dans les chefs-lieux des gouvernorats2. Elle totalise 169 agences fin 2013.

Le groupe BNA comporte 18 filiales dont neuf sociétés financières et neuf actives dans divers secteurs d’activité : immobilier, agricole et services4. Elle a des relations de correspondance avec près de 800 banques réparties à travers les cinq continents. En France, elle a des relations avec Natixis, BNP Paribas, le Crédit agricole, HSBC, Crédit lyonnais et la Société générale.

J’effectue mon stage à l’agence BNA Nabeul.

J’ai choisi de travailler sur les crédits de cette année ( 1er janvier 2016 -2 aout 2016)

J’ai fait une collecte de données à partir des bases de données de l’agence. Ma base de données contient:

j’ai 173 individus

ID: un identifiant pour chaque client qui a eu un crédit ( pour la confidentialité )

Sexe: sexe du client

Montant: le montant du crédit

Nb_crédit: nombre de crédits qui ont été obtenu avant ce dernier ( ne sont pas nécessairement de même type )

Salaire: salaire du client

Age

catégorie_age: j’ai divisé les ages par intervalle :

. <35 : “1” : jeune 35<= . <50 :“2”: adulte . >= 50 :“3” : vieillard

Produit: Type de crédit , je l’ai codé , la BNA a plusieurs types crédits , mais seulement 9 ont été accordés pour cette année 1: " Crédit direct Aménagement" 2:“Crédit direct Dépenses courantes” 3: “FAREH” 4:" Crédit direct Aménagement logement hypothécaire " 5:" Malek Acquisition " 6:" Crédit direct Acquisition Logement" 7:" Crédit direct Construction " 8:" Crédit direct Achat terrain" 9:“MALEK Construction”

Importer la data set

bna <- read.csv2("C:/Users/yesmi/Desktop/dashboard/bna.csv", row.names=1)
head(bna)
##   Montant Nb_crédit Age Produit Catégorie_age Sexe
## 1       2         5  63       1             3    F
## 2      12         4  63       1             3    F
## 3      13         2  66       1             3    H
## 4       6         3  64       1             3    H
## 5       4         3  62       1             3    H
## 6      20         3  61       1             3    F
##                            Profession  Salaire
## 1                         surveillant  912.243
## 2                          enseignant  929.803
## 3               chef de relevé sonede 1614.113
## 4 employé au ministère de l'intérieur  919.604
## 5                          professeur 1424.259
## 6                           infirmier  994.608
summary(bna)
##     Montant         Nb_crédit           Age           Produit    
##  Min.   :  1.00   Min.   : 1.000   Min.   :25.00   Min.   :1.00  
##  1st Qu.:  6.00   1st Qu.: 2.000   1st Qu.:46.00   1st Qu.:1.00  
##  Median : 12.00   Median : 3.000   Median :52.00   Median :1.00  
##  Mean   : 14.62   Mean   : 3.227   Mean   :51.38   Mean   :1.61  
##  3rd Qu.: 20.00   3rd Qu.: 4.000   3rd Qu.:59.00   3rd Qu.:2.00  
##  Max.   :150.00   Max.   :11.000   Max.   :68.00   Max.   :9.00  
##                                    NA's   :18                    
##  Catégorie_age   Sexe            Profession    Salaire      
##  Min.   :1.000   F: 57                :24   Min.   : 186.1  
##  1st Qu.:2.000   H:115   retraité     :13   1st Qu.: 632.3  
##  Median :3.000           enseignant   :12   Median : 914.5  
##  Mean   :2.571           fonctionnaire:12   Mean   : 942.0  
##  3rd Qu.:3.000           professeur   :12   3rd Qu.:1205.7  
##  Max.   :3.000           ouvrier      : 8   Max.   :3249.2  
##  NA's   :18              (Other)      :91   NA's   :11
str(bna)
## 'data.frame':    172 obs. of  8 variables:
##  $ Montant      : num  2 12 13 6 4 20 16 22 27.5 18 ...
##  $ Nb_crédit    : int  5 4 2 3 3 3 4 3 4 4 ...
##  $ Age          : int  63 63 66 64 62 61 61 66 58 60 ...
##  $ Produit      : int  1 1 1 1 1 1 1 2 1 1 ...
##  $ Catégorie_age: int  3 3 3 3 3 3 3 3 3 3 ...
##  $ Sexe         : Factor w/ 2 levels "F","H": 1 1 2 2 2 1 2 2 2 2 ...
##  $ Profession   : Factor w/ 72 levels "","agent","agent de police",..: 67 25 11 19 59 44 55 5 1 18 ...
##  $ Salaire      : num  912 930 1614 920 1424 ...
bna$Salaire=bna$Salaire*0.001 
bna$Produit=as.factor(bna$Produit)
bna$Sexe=as.factor(bna$Sexe)
bna$Catégorie_age=as.factor(bna$Catégorie_age)
bna=bna[,-7]
head(bna)
##   Montant Nb_crédit Age Produit Catégorie_age Sexe  Salaire
## 1       2         5  63       1             3    F 0.912243
## 2      12         4  63       1             3    F 0.929803
## 3      13         2  66       1             3    H 1.614113
## 4       6         3  64       1             3    H 0.919604
## 5       4         3  62       1             3    H 1.424259
## 6      20         3  61       1             3    F 0.994608

Vérification et visualisation des valeurs manquantes

J’ai utilisé plusieurs librairies pour visualiser les valeurs manquantes et pour pouvoir par la suite rémédier à ce problème

sapply(bna,function(x) sum(is.na(x)) ) 
##       Montant     Nb_crédit           Age       Produit Catégorie_age 
##             0             0            18             0            18 
##          Sexe       Salaire 
##             0            11
library(Rcpp)
library(Amelia)
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.4, built: 2015-12-05)
## ## Copyright (C) 2005-2016 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
missmap(bna,main="missing values per variable",col = c("white","blue"))

library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## Loading required package: data.table
## VIM is ready to use. 
##  Since version 4.0.0 the GUI is in its own package VIMGUI.
## 
##           Please use the package to use the new (and old) GUI.
## Suggestions and bug-reports can be submitted at: https://github.com/alexkowa/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
## Show cases with missing values
bna[!complete.cases(bna),]
##     Montant Nb_crédit Age Produit Catégorie_age Sexe  Salaire
## 12      5.0         3  NA       1          <NA>    F 1.205730
## 15      3.5         3  NA       1          <NA>    H 1.061682
## 17     15.0         6  NA       1          <NA>    H 0.708718
## 33      5.5         3  NA       1          <NA>    F 0.950585
## 69     10.0         1  NA       1          <NA>    H 0.872198
## 86      7.0         1  NA       2          <NA>    F 1.299135
## 103    80.0         3  NA       8          <NA>    H       NA
## 108    10.0         4  NA       1          <NA>    H 0.524288
## 111     6.0         3  NA       1          <NA>    F 0.261158
## 113    23.0         1  NA       1          <NA>    F 0.208512
## 114     5.0         3  NA       2          <NA>    F 0.814134
## 115    10.0         1  NA       1          <NA>    F 0.924547
## 118    22.0         1  29       8             1    H       NA
## 124    12.0         2  51       1             3    H       NA
## 129     5.0         2  50       4             3    H       NA
## 130     2.0         2  41       2             2    H       NA
## 131    20.0         2  52       4             3    H       NA
## 132    12.0         3  NA       1          <NA>    H       NA
## 138    15.0         2  58       1             3    H       NA
## 146   150.0         1  52       9             3    H       NA
## 165     8.0         2  48       4             2    F       NA
## 168    18.0         1  NA       1          <NA>    H 0.661424
## 169     7.0         1  NA       1          <NA>    F 0.302706
## 170    13.0         1  NA       1          <NA>    H 0.498935
## 171     5.0         1  NA       2          <NA>    H       NA
## 172     2.5         1  NA       2          <NA>    H 0.186114
library(mice)
## mice 2.25 2015-11-09
md.pattern(bna)
##     Montant Nb_crédit Produit Sexe Salaire Age Catégorie_age   
## 146       1         1       1    1       1   1             1  0
##   8       1         1       1    1       0   1             1  1
##  15       1         1       1    1       1   0             0  2
##   3       1         1       1    1       0   0             0  3
##           0         0       0    0      11  18            18 47
aggr(bna, prop = F, numbers = T)

aggr(bna, prop = T, numbers = T)

## Matrix plot. Red for missing values, Darker values are high values.
matrixplot(bna, interactive = F)

## Margin plot. Red dots have at least one missing. No observation with two missing values here.
##marginplot(bna[,c("Salaire","Age")])

Comment rémédier à ce problème :

Pour les variables quantitatives : je propose qu’on remplace les valeurs manquantes par le mode/médiane/moyenne de chaque variable

bna$Age[is.na(bna$Age)]=round(mean(bna$Age[rev(is.na(bna$Age))]))
bna$Salaire[is.na(bna$Salaire)]=round(mean(bna$Salaire[rev(is.na(bna$Salaire))]))

Pour les variables qualitatives: on n’a qu’à remplacer les valeurs manquantes par le mode de la varibale

bna$Catégorie_age[is.na(bna$Catégorie_age)]=bna$Catégorie_age[which.max(bna$Catégorie_age[rev(is.na(bna$Catégorie_age))])]
emarque : Solutions plus avancées :
lien source : http://www.theanalysisfactor.com/missing-data-two-recommended-solutions/)
eux méthodes pour traiter les données manquantes, de vastes améliorations par rapport aux approches traditionnelles sont devenues disponibles dans les logiciels statistiques courants au cours des dernières années. Les deux méthodes décrites ici exigent que les données manquent au hasard, sans rapport avec les valeurs manquantes.
ère méthode : IMPUTATION MULTIPLE (MI) : remplit des estimations pour les données manquantes. Mais pour saisir l’incertitude dans ces estimations, MI estime les valeurs à plusieurs reprises. Parce qu’il utilise une méthode d’imputation avec l’erreur intégrée, les estimations multiples devraient être similaires, mais pas identiques.
ème méthode : Estimation du maximum de vraisemblance : Cette méthode n’impute pas de données, mais utilise plutôt chaque cas, les données disponibles pour calculer les estimations du maximum de vraisemblance. L’estimation du maximum de vraisemblance d’un paramètre correspond à la valeur du paramètre qui est le plus susceptible d’avoir donné lieu à des données observées

Visualisation

variables continues

visualisation des histogrammes , la densité , les boxplots et le nuage de points

library(ggplot2)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:graphics':
## 
##     layout
dev.off()
## null device 
##           1
# Montant
plot_ly(bna,x=bna$Montant, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Montant)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667")  +geom_vline(aes(xintercept=mean(bna$Montant, na.rm=T)), color="red", linetype="dashed", size=1)
#Nb_crédit
plot_ly(bna,x=bna$Nb_crédit, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Nb_crédit)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667")  +geom_vline(aes(xintercept=mean(bna$Nb_crédit, na.rm=T)), color="red", linetype="dashed", size=1)
#Age 
plot_ly(bna,x=bna$Age, type="box",boxpoints="all", jitter=0.4)
ggplot(bna, aes(x=bna$Age)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667")  +geom_vline(aes(xintercept=mean(bna$Age, na.rm=T)), color="red", linetype="dashed", size=1)

#Salaire
ggplot(bna, aes(x=bna$Salaire)) + geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="blue") + geom_density(alpha=.4, fill="#FF7667") +geom_vline(aes(xintercept=mean(bna$Salaire, na.rm=T)), color="red", linetype="dashed", size=1)



#comparaison
plot.multi.dens <- function(s)
{
    junk.x = NULL
    junk.y = NULL
    for(i in 1:length(s)) {
        junk.x = c(junk.x, density(s[[i]])$x)
        junk.y = c(junk.y, density(s[[i]])$y)
    }
    xr <- range(junk.x)
    yr <- range(junk.y)
    plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
    for(i in 1:length(s)) {
        lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
    }
}

# the input of the following function MUST be a numeric list
plot.multi.dens( list(bna$Age,bna$Salaire))
plot.multi.dens( list(bna$Salaire,bna$Montant))

factors

library(ggplot2)
library(plotly)
table(bna$Sexe)
## 
##   F   H 
##  57 115
p1=plot_ly(bna, labels = c("Femme","Homme"), values = table(bna$Sexe), type = "pie")
p2=layout(p1, title = "Sexe ")
p2
table(bna$Catégorie_age)
## 
##   1   2   3 
##   9  48 115
p3=plot_ly(bna, labels = c("Jeune(. <35)","Adulte(35=<.<50)","Vieillard(>=50"), values = table(bna$Catégorie_age), type = "pie")
p4=layout(p3, title = "Catégorie d'age des clients ayant des crédits")
p4
table(bna$Produit)
## 
##   1   2   3   4   5   6   7   8   9 
## 124  30   3   7   1   2   2   2   1
p5=plot_ly(bna, labels = c("Crédit direct Aménagement", "Crédit direct Dépenses courantes", "FAREH","Crédit direct Aménagement logement hypothécaire ",
"Malek Acquisition ",
"Crédit direct Acquisition Logement","Crédit direct Construction "," Crédit direct Achat terrain","MALEK Construction"), values = table(bna$Produit), type = "pie")
p6=layout(p5, title = "Produits ")
p6

Visualisation avancée

library(rbokeh)
library(ggplot2)

tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[c(1:3,7)]), stringsAsFactors = FALSE)
splom_list <- vector("list", 4)
for(ii in seq_len(nrow(nms))) {
  splom_list[[ii]] <- figure(width = 300, height = 300, tools = tools,
                             xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
    ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
              color = Sexe, size = 6, legend = FALSE)
}
grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[1:3]), stringsAsFactors = FALSE)
splom_list <- vector("list", 16)
for(ii in seq_len(nrow(nms))) {
  splom_list[[ii]] <- figure(width = 300, height = 300, tools = tools,
                             xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
    ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
              color = Catégorie_age, size = 6, legend = FALSE)
}
grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
tools <- c("pan", "wheel_zoom", "box_zoom", "box_select", "reset")
nms <- expand.grid(names(bna)[c(1:3,7)], rev(names(bna)[c(1:3,7)]), stringsAsFactors = FALSE)
splom_list <- vector("list", 16)
for(ii in seq_len(nrow(nms))) {
  splom_list[[ii]] <- figure(width = 400, height = 400, tools = tools,
                             xlab = nms$Var1[ii], ylab = nms$Var2[ii]) %>%
    ly_points(nms$Var1[ii], nms$Var2[ii], data = bna,
              color = Produit, size = 6, legend = FALSE)
}

grid_plot(splom_list, ncol = 4, same_axes = TRUE, link_data = TRUE)
#Salaire en foction d'age (catégorie d'age)
figure(legend_location = "top_left") %>%
  ly_quantile(Salaire, group = Catégorie_age, data = bna)
e<- figure() %>%
  ly_points(Age, Salaire, data = bna,
            color = Catégorie_age, glyph =Catégorie_age,
            hover = list(Age, Salaire))
e
#Salaire en foction d'age (sexe)

k<- figure() %>%
  ly_points(Age, Salaire, data = bna,
            color = Sexe, glyph =Sexe,
            hover = list(Age, Salaire))
k
#Salaire en foction d'age (produit)

l<- figure() %>%
  ly_points(Age, Salaire, data = bna,
            color = Produit, glyph =Produit,
            hover = list(Age, Salaire))
l
#Salaire en foction d'age (catégorie d'age)

e<- figure() %>%
  ly_points(Age, Salaire, data = bna,
            color = Catégorie_age, glyph =Catégorie_age,
            hover = list(Age, Salaire))
e
#Salaire en foction de bn credit (catégorie d'age)

m<- figure() %>%
  ly_points(Nb_crédit, Salaire, data = bna,
            color = Catégorie_age, glyph =Catégorie_age,
            hover = list(Age, Salaire))
m
#Salaire en foction de bn credit (sexe)

n<- figure() %>%
  ly_points(Nb_crédit, Salaire, data = bna,
            color =Sexe, glyph =Sexe,
            hover = list(Age, Salaire))
n
#Salaire en foction de nb credit (Produit)

o<- figure() %>%
  ly_points(Nb_crédit, Salaire, data = bna,
            color =Produit, glyph =Produit,
            hover = list(Age, Salaire))
o
#nombre de crédits en fonction de l'age ( catégorie  d'age) 
p<- figure() %>%
  ly_points(Age,Nb_crédit, data = bna,
            color =Catégorie_age, glyph =Catégorie_age,
            hover = list(Age, Salaire))
p
#nombre de crédits en fonction de l'age ( sexe) 
q<- figure() %>%
  ly_points(Age,Nb_crédit, data = bna,
            color =Sexe, glyph =Sexe,
            hover = list(Age, Salaire))
q
#nombre de crédits en fonction de l'age ( Produit) 
r<- figure() %>%
  ly_points(Age,Nb_crédit, data = bna,
            color =Produit, glyph =Produit,
            hover = list(Age, Salaire))
r
# Monatant en fonction d'age ( catégorie d'age )




a <- figure() %>%
  ly_points(Age, Montant, data = bna,
            color = Catégorie_age, glyph =Catégorie_age ,
            hover = list(Age, Montant))
a
figure(ylab = "Montant(Sexe)", width = 600) %>%
  ly_boxplot(Sexe, Montant, data = bna)
figure(ylab = "Montant( Produit)", width = 600) %>%
  ly_boxplot(Produit, Montant, data = bna)
figure(ylab = "Montant(Catégorie_age)", width = 600) %>%
  ly_boxplot(Catégorie_age, Montant, data = bna)
# Montant en fontion de Nombre de crédits déja pris ( Catégorie d'age )

b<- figure() %>%
  ly_points(Nb_crédit, Montant, data = bna,
            color = Catégorie_age, glyph =Catégorie_age ,
            hover = list(Nb_crédit, Montant))
b
figure(legend_location = "top_left") %>%
  ly_quantile(Nb_crédit, group = Catégorie_age, data = bna)
figure(legend_location = "top_left") %>%
  ly_quantile(Montant, group = Produit, data = bna)
figure(ylab = "Nb_crédit(Sexe)", width = 600) %>%
  ly_boxplot(Sexe, Nb_crédit, data = bna,color=c("red","blue"))
figure(ylab = " Nb_crédit(Catégorie_age)", width = 600) %>%
  ly_boxplot(Catégorie_age, Nb_crédit, data = bna)
figure(ylab = "Nb_crédit( Produit)", width = 600) %>%
  ly_boxplot(Produit, Nb_crédit, data = bna)
# Montant en fontion de Nombre de crédits déja pris ( sexe )


c<- figure() %>%
  ly_points(Nb_crédit, Montant, data = bna,
            color = Sexe, glyph =Sexe ,
            hover = list(Nb_crédit, Montant))
c
figure(legend_location = "top_left") %>%
  ly_quantile(Nb_crédit, group = Sexe, data = bna)
figure(legend_location = "top_left") %>%
  ly_quantile(Montant, group = Produit, data = bna)
# Montant en fontion de Nombre de crédits déja pris (Produit)
d<- figure() %>%
  ly_points(Nb_crédit, Montant, data = bna,
            color = Produit, glyph =Produit ,
            hover = list(Nb_crédit, Montant))
d
#Montant en fonction des Salaires (sexe)

f<- figure() %>%
  ly_points(Salaire, Montant, data = bna,
            color = Sexe, glyph =Sexe ,
            hover = list(Salaire, Montant))
f
#Montant en foction des salaires ( produit) 
g<- figure() %>%
  ly_points(Salaire, Montant, data = bna,
            color = Produit, glyph =Produit ,
            hover = list(Salaire, Montant))
g
#Montant en foction des salaires ( Catégorie d'age) 
h<- figure() %>%
  ly_points(Salaire, Montant, data = bna,
            color = Catégorie_age, glyph =Catégorie_age,
            hover = list(Salaire, Montant))
h